<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="renderer" content="webkit">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <base href="./">
  <title>TTeamCMS</title>
  <script type="text/javascript">



    function sort(obj) {
      const sortedObj = {}
      Object.keys(obj)
        .sort()
        .forEach(key => {
          sortedObj[key] = obj[key]
        })

      return sortedObj
    }

    function sortJson(obj) {
      obj.dependencies = sort(obj.dependencies)
      obj.devDependencies = sort(obj.devDependencies)
      return obj
    }

    function deleteKeys(obj, keys) {
      if (typeof keys === 'object') {
        keys = Object.keys(keys)
      }
      if (!(keys instanceof Array)) {
        return
      }

      keys.forEach(key => {
        delete obj[key]
      })
      return obj
    }

    const pageJson = sortJson({
      name: 'tteamcms-page',
      dependencies: {
        '@babel/plugin-transform-class-properties': '^7.25.4',
        '@babel/plugin-transform-export-namespace-from': '^7.24.7',
        '@babel/plugin-transform-json-strings': '^7.24.7',
        '@babel/runtime': '^7.25.4',
        '@popperjs/core': '^2.11.8',
        axios: '^0.21.1',
        bootstrap: '^4.6.1',
        'bootstrap-vue': '^2.23.0',
        'core-js': '^3.38.1',
        dayjs: '^1.11.10',
        'element-ui': '^2.15.13',
        'font-awesome': '^4.7.0',
        jquery: '^1.9.1',
        photoswipe: '^4.1.3',
        'portal-vue': '^2.1.7',
        'resize-observer-polyfill': '^1.5.1',
        'tt-js-utils': '~1.0.2',
        vue: '^2.7.14',
        'vue-i18n': '8.2.1',
        'vue-lazyload': '^1.3.4',
        'vue-router': '^3.0.1',
        'weaver-engine-vue': '1.0.7'
      },
      devDependencies: {
        '@babel/core': '^7.0.0',
        '@babel/plugin-proposal-decorators': '^7.0.0',
        '@babel/plugin-proposal-function-sent': '^7.0.0',
        '@babel/plugin-proposal-numeric-separator': '^7.0.0',
        '@babel/plugin-proposal-throw-expressions': '^7.0.0',
        '@babel/plugin-syntax-dynamic-import': '^7.0.0',
        '@babel/plugin-syntax-import-meta': '^7.0.0',
        '@babel/plugin-syntax-jsx': '^7.0.0',
        '@babel/plugin-transform-modules-commonjs': '^7.0.0',
        '@babel/plugin-transform-runtime': '^7.0.0',
        '@babel/preset-env': '^7.0.0',
        '@babel/register': '^7.0.0',
        autoprefixer: '^7.1.2',
        'babel-core': '^7.0.0-bridge.0',
        'babel-eslint': '^9.0.0',
        'babel-helper-vue-jsx-merge-props': '^2.0.3',
        'babel-jest': '^23.4.2',
        'babel-loader': '^8.0.0',
        'babel-plugin-dynamic-import-node': '^1.2.0',
        'babel-plugin-transform-vue-jsx': '^3.5.0',
        chalk: '^2.0.1',
        chromedriver: '^2.27.2',
        'copy-webpack-plugin': '^9.0.1',
        'cross-spawn': '^5.0.1',
        'css-loader': '^0.28.0',
        'css-minimizer-webpack-plugin': '^3.0.2',
        eslint: '^4.15.0',
        'eslint-config-standard': '^10.2.1',
        'eslint-friendly-formatter': '^3.0.0',
        'eslint-loader': '^2.1.2',
        'eslint-plugin-import': '^2.7.0',
        'eslint-plugin-node': '^5.2.0',
        'eslint-plugin-promise': '^3.4.0',
        'eslint-plugin-standard': '^3.0.1',
        'eslint-plugin-vue': '^4.0.0',
        'file-loader': '^1.1.4',
        'friendly-errors-webpack-plugin': '^1.7.0',
        'html-webpack-plugin': '^5.3.2',
        jest: '^22.0.4',
        'jest-serializer-vue': '^0.3.0',
        'mini-css-extract-plugin': '^0.5.0',
        nightwatch: '^0.9.12',
        'node-notifier': '^5.1.2',
        'node-sass': '^4.7.2',
        ora: '^1.2.0',
        portfinder: '^1.0.28',
        'postcss-import': '^11.0.0',
        'postcss-loader': '^2.0.8',
        'postcss-url': '^7.2.1',
        rimraf: '^2.6.0',
        'sass-loader': '^7.0.3',
        'selenium-server': '^3.0.1',
        semver: '^5.3.0',
        shelljs: '^0.7.6',
        'terser-webpack-plugin': '1.4.5',
        'url-loader': '^0.5.8',
        'vue-jest': '^1.0.2',
        'vue-loader': '^15.7.0',
        'vue-style-loader': '^4.1.2',
        'vue-template-compiler': '^2.6.12',
        webpack: '^5.52.0',
        'webpack-bundle-analyzer': '^4.4.1',
        'webpack-cli': '^4.8.0',
        'webpack-dev-server': '^4.1.0',
        'webpack-merge': '^5.8.0'
      }
    })

    const adminJson = sortJson({
      name: 'tteamcms-admin',
      dependencies: {
        '@fortawesome/fontawesome-free': '^5.1.0-4',
        '@riophae/vue-treeselect': '0.0.37',
        '@stomp/stompjs': '6.1.2',
        '@tinymce/tinymce-vue': '^2.0.0',
        axios: '0.18.0',
        clipboard: '1.7.1',
        codemirror: '^5.65.16',
        connect: '3.6.6',
        echarts: '4.1.0',
        'element-ui': '2.10.1',
        esprima: '^4.0.1',
        'file-saver': '1.3.8',
        'font-awesome': '4.7.0',
        html2canvas: '^1.0.0-rc.5',
        'js-cookie': '2.2.0',
        jszip: '3.1.5',
        'normalize.css': '7.0.0',
        nprogress: '0.2.0',
        qrcode: '^1.4.4',
        'resize-observer-polyfill': '^1.5.1',
        screenfull: '3.3.3',
        'sockjs-client': '^1.6.1',
        tinymce: '^5.0.3',
        'v-charts': '1.19.0',
        'v-distpicker': '^1.2.2',
        vcolorpicker: '^1.1.0',
        vue: '2.5.17',
        'vue-clipboard2': '^0.3.3',
        'vue-codemirror': '^4.0.6',
        'vue-count-to': '1.0.13',
        'vue-i18n': '7.3.2',
        'vue-lazyload': '^1.3.4',
        'vue-qr': '^2.2.1',
        'vue-router': '3.0.1',
        vuedraggable: '^2.24.3',
        vuex: '3.0.1',
        'vxe-pc-ui': '3.1.33',
        'vxe-table': '3.9.16',
        'weaver-editor-vue': '1.0.42',
        xlsx: '^0.11.16',
        'xml-formatter': '^2.6.1'
      },
      devDependencies: {
        autoprefixer: '8.5.0',
        'babel-core': '6.26.3',
        'babel-eslint': '^7.2.3',
        'babel-helper-vue-jsx-merge-props': '2.0.3',
        'babel-loader': '7.1.5',
        'babel-plugin-dynamic-import-node': '2.0.0',
        'babel-plugin-syntax-jsx': '6.18.0',
        'babel-plugin-transform-runtime': '6.23.0',
        'babel-plugin-transform-vue-jsx': '3.7.0',
        'babel-preset-env': '1.7.0',
        'babel-preset-stage-2': '6.24.1',
        chalk: '2.4.1',
        'copy-webpack-plugin': '4.5.2',
        'cross-env': '5.2.0',
        'css-loader': '1.0.0',
        eslint: '4.19.1',
        'eslint-friendly-formatter': '4.0.1',
        'eslint-loader': '2.0.0',
        'eslint-plugin-vue': '4.7.1',
        'file-loader': '1.1.11',
        'friendly-errors-webpack-plugin': '1.7.0',
        'hash-sum': '1.0.2',
        'html-webpack-plugin': '4.0.0-alpha',
        husky: '0.14.3',
        'lint-staged': '7.2.2',
        'mini-css-extract-plugin': '0.4.1',
        'node-notifier': '5.2.1',
        'node-sass': '^4.7.2',
        'optimize-css-assets-webpack-plugin': '5.0.0',
        ora: '3.0.0',
        'path-to-regexp': '2.4.0',
        portfinder: '1.0.13',
        'postcss-import': '11.1.0',
        'postcss-loader': '2.1.6',
        'postcss-url': '7.3.2',
        'replace-in-file-webpack-plugin': '^1.0.6',
        rimraf: '2.6.2',
        'sass-loader': '7.0.3',
        'script-ext-html-webpack-plugin': '2.0.1',
        'script-loader': '0.7.2',
        semver: '5.5.0',
        'serve-static': '1.13.2',
        shelljs: '0.8.2',
        'svg-sprite-loader': '3.8.0',
        svgo: '1.0.5',
        'uglifyjs-webpack-plugin': '1.2.7',
        'url-loader': '1.0.1',
        'vue-loader': '15.3.0',
        'vue-style-loader': '4.1.2',
        'vue-template-compiler': '2.5.17',
        webpack: '4.16.5',
        'webpack-bundle-analyzer': '2.13.1',
        'webpack-cli': '3.1.0',
        'webpack-dev-server': '3.1.14',
        'webpack-merge': '4.1.4'
      }
    })

    let result = JSON.parse(JSON.stringify(adminJson))

    for (const key in pageJson.dependencies) {
      if (result.dependencies[key]) {
        result.dependencies[key] = pageJson.dependencies[key]
      }
    }
    for (const key in pageJson.devDependencies) {
      if (result.devDependencies[key]) {
        result.devDependencies[key] = pageJson.devDependencies[key]
      }
    }

    Object.assign(result.dependencies, {
      '@babel/plugin-transform-class-properties': '^7.25.4',
      '@babel/plugin-transform-export-namespace-from': '^7.24.7',
      '@babel/plugin-transform-json-strings': '^7.24.7',
      '@babel/runtime': '^7.25.4',
      '@popperjs/core': '^2.11.8',

      'core-js': '^3.38.1',
      dayjs: '^1.11.10',
      'portal-vue': '^2.1.7',
      'tt-js-utils': '~1.0.2'
    })
    Object.assign(result.devDependencies, {
      '@babel/core': '^7.0.0',
      '@babel/plugin-proposal-decorators': '^7.0.0',
      '@babel/plugin-proposal-function-sent': '^7.0.0',
      '@babel/plugin-proposal-numeric-separator': '^7.0.0',
      '@babel/plugin-proposal-throw-expressions': '^7.0.0',
      '@babel/plugin-syntax-dynamic-import': '^7.0.0',
      '@babel/plugin-syntax-import-meta': '^7.0.0',
      '@babel/plugin-syntax-jsx': '^7.0.0',
      '@babel/plugin-transform-modules-commonjs': '^7.0.0',
      '@babel/plugin-transform-runtime': '^7.0.0',
      '@babel/preset-env': '^7.0.0',
      '@babel/register': '^7.0.0',

      'babel-jest': '^23.4.2',
      chromedriver: '^2.27.2',
      'cross-spawn': '^5.0.1',
      'css-minimizer-webpack-plugin': '^3.0.2',
      'eslint-config-standard': '^10.2.1',
      'eslint-plugin-import': '^2.7.0',
      'eslint-plugin-node': '^5.2.0',
      'eslint-plugin-promise': '^3.4.0',
      'eslint-plugin-standard': '^3.0.1',

      'selenium-server': '^3.0.1',
      'terser-webpack-plugin': '1.4.5'
    })

    deleteKeys(result.devDependencies, {
      //   'babel-plugin-syntax-jsx': '6.18.0',
      'babel-plugin-transform-runtime': '6.23.0',
      'babel-preset-env': '1.7.0',
      'babel-preset-stage-2': '6.24.1'
    })

    result = sortJson(result)

    console.log('*********** dependencies 缺少的')
    const diff1 = {}
    for (const key in pageJson.dependencies) {
      if (!result.dependencies[key]) {
        diff1[key] = pageJson.dependencies[key]
      }
    }
    console.log(diff1)

    console.log('*********** devDependencies 缺少的')
    const diff2 = {}
    for (const key in pageJson.devDependencies) {
      if (!result.devDependencies[key]) {
        diff2[key] = pageJson.devDependencies[key]
      }
    }
    console.log(diff2)

    console.log('')
    console.log('')

    console.log('***********adminJson***********')
    console.log(adminJson)

    console.log('***********pageJson***********')
    console.log(pageJson)

    console.log('')
    console.log('')

    console.log('***********result***********')
    console.log(result)

    console.log('')
    console.log('')



  </script>
</head>

<body>
  <div id="app"></div>
  <!-- built files will be auto injected -->
</body>

</html>